package com.java.map;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.junit.Test;

import com.collection.model.Student;

/**
 * HashMap测试类
 * @author LC
 *
 */
public class HashMapTest {
	
	/**
	 * HashMap测试01：
	 * 		Map<String, String> map = new HashMap<String, String>() ;
	 */
	@Test
	public void testHashMap_01() {
		Map<String, String> map = new HashMap<String, String>() ;
		
		map.put("北京行政区划", "东城区（景山街道），西城区（金融街街道），朝阳区（朝外街道），" +
				"丰台区（丰台街道），石景山区（鲁谷街道），海淀区（海淀街道），门头沟区（大峪街道）" +
				"房山区（拱辰街道），通州区（北苑街道），顺义区（胜利街道），昌平区（城北街道）" +
				"大兴区（兴丰街道），怀柔区（龙山街道），平谷区（滨河街道），延庆区（儒林街道），密云区（鼓楼街道）") ;
		map.put("上海行政区划", "黄浦区，徐汇区，长宁区，静安区，普陀区，虹口区，杨浦区，闵行区，宝山区，嘉定区，浦东新区，金山区，松江区，青浦区，奉贤区，崇明县") ;
		map.put("天津行政区划", "和平区,河东区,河西区，南开区，河北区，红桥区，东丽区，西青区，津南区，北辰区，武清区，宝坻区，滨海新区，宁河区，静海区，蓟州区") ;
		
		System.out.println("map中包含元素个数：" + map.size());
		System.out.println();
		
		System.out.println("北京行政区划：" + map.get("北京行政区划")); 
		System.out.println();
		
		Collection<String> values = map.values() ;
		for (String value : values) {
			System.out.println(value);
		}
		System.out.println();
		
		Set<String> keys = map.keySet() ;
		for (String key : keys) {
			System.out.println(key + ":" + map.get(key));
		}
		System.out.println();
		
		Set<Entry<String, String>> object = map.entrySet() ;
		for (Entry<String, String> entry : object) {
			System.out.println(entry.getKey() + ":" + entry.getValue());
		}
		System.out.println();
		
		System.out.println("是否包含key值为'北京行政区划'的元素" + map.containsKey("北京行政区划"));
		map.remove("北京行政区划") ;
		System.out.println("是否包含key值为'北京行政区划'的元素" + map.containsKey("北京行政区划"));
		System.out.println();
		
		Set<String> keys02 = map.keySet() ;
		for(String key : keys02) {
			System.out.println(key + ":" + map.get(key));
		}
		System.out.println();
		
		map.clear() ;
		
		for(Entry<String, String> entry : map.entrySet()) {
			System.out.println(entry.getKey() + ":" + entry.getValue());
		}
		System.out.println();
	}
	
	/**
	 * HashMap测试02：
	 * 		Map<Integer, String> map = new HashMap<>() ;
	 */
	@Test
	public void testHashMap_02() {
		Map<Integer, String> map = new HashMap<>() ;
		
		map.put(1, "北京市") ;
		map.put(2, "上海市") ;
		map.put(3, "天津市") ;
		
		System.out.println("map集合中包含元素个数:" + map.size());
		System.out.println();
		
		System.out.println("key值为1的value:" + map.get(1));
		System.out.println();
		
		Set<Integer> keys = map.keySet() ;
		for (Integer key : keys) {
			System.out.println(key + ":" + map.get(key));
		}
		System.out.println();
		
		System.out.println("是否包含value值为'上海市'的元素:" + map.containsValue("上海市"));
		System.out.println("删除元素2:上海市");
		map.remove(2) ;
		System.out.println("是否包含value值为'上海市'的元素:" + map.containsValue("上海市"));
		System.out.println();
		
		System.out.println("取出map中所有的value值");
		Collection<String> values = map.values() ;
		for (String value : values) {
			System.out.println(value);
		}
		System.out.println();
		
		map.clear() ;
		
		Set<Entry<Integer, String>> object = map.entrySet() ;
		for (Entry<Integer, String> entry : object) {
			System.out.println(entry.getKey() + ":" + entry.getValue());
		}
		System.out.println();
	}
	
	/**
	 * HashMap测试03：
	 * 		Map<String, Student> map = new HashMap<>() ;
	 */
	@Test
	public void testHashMap_03() {
		Map<String, Student> map = new HashMap<>() ;
		
		map.put("001", new Student("张三01",21)) ;
		map.put("003", new Student("张三03",23)) ;
		map.put("002", new Student("张三02",22)) ;
		map.put("003", new Student("张三04",24)) ;
		
		System.out.println("map中元素的个数：" + map.size());
		System.out.println();
		
		System.out.println("获取key值为'002'的value:" + map.get("002"));
		System.out.println();
		
		System.out.println("遍历输出map中的所有元素");
		Set<String> keys = map.keySet() ;
		for (String key : keys) {
			System.out.println(key + ":" + map.get(key));
		}
		System.out.println();
		
		System.out.println("map中是否包含key值为'002'的元素：" + map.containsKey("002"));
		System.out.println("删除map中key值为'002'的元素");
		map.remove("002") ;
		System.out.println("map中是否包含key值为'002'的元素：" + map.containsKey("002"));
		System.out.println();
		
		System.out.println("遍历输出map中的所有元素");
		for (Entry<String, Student> entry:map.entrySet()) {
			System.out.println(entry.getKey() + ":" + entry.getValue());
		}
		System.out.println();
	}
	
	/**
	 * HashMap测试04:
	 * 		Map<Student, String> map = new HashMap<>() ;
	 */
	@Test
	public void testHashMap_04() {
		Map<Student, String> map = new HashMap<>() ;
		
		Student student01 = new Student("张三04",21) ;
		Student student02 = new Student("张三04",21) ;
		Student student03 = new Student("张三04",21) ;
		Student student04 = new Student("张三04",21) ;
		
		map.put(student01, "004") ;
		map.put(student03, "003") ;
		map.put(student02, "003") ;
		map.put(student04, "003") ;
		
		System.out.println("输出map中元素的个数:" +map.size());
		System.out.println();
		
		System.out.println("迭代输出map中所有的元素");
		Set<Student> keys = map.keySet() ;
		for (Student student : keys) {
			System.out.println(student + ":" + map.get(student));
		}
		System.out.println();
		
		System.out.println("是否存在key值为studnet02对象的元素：" +map.containsKey(student02));
		System.out.println("删除key值为'studeng02'对象的元素");
		map.remove(student02) ;
		System.out.println("是否存在key值为studnet02对象的元素：" +map.containsValue("002"));
		System.out.println();
		
		System.out.println("清除map集合中的所有元素");
		map.clear() ;
		
		System.out.println("迭代输出map中所有的元素");
		Set<Entry<Student, String>> object = map.entrySet() ;
		for (Entry<Student, String> entry : object) {
			System.out.println(entry.getKey() + ":" + entry.getValue());
		}
	}
	
	/**
	 * HashMap测试05:
	 * 		Map<String, List<Student>> map = new HashMap<>() ;
	 */
	@Test
	public void testHashMap_05() {
		Map<String, List<Student>> map = new HashMap<>() ;
		
		List<Student> list01 = new ArrayList<>() ;
		list01.add(new Student("张三01",21)) ;
		list01.add(new Student("张三03",21)) ;
		
		List<Student> list02 = new ArrayList<>() ;
		list02.add(new Student("张三04",21)) ;
		list02.add(new Student("张三02",21)) ;
		
		map.put("list01", list01) ;
		map.put("list02", list02) ;
		
		System.out.println("输出map集合中的元素个数：" + map.size());
		System.out.println();
		
		System.out.println("输出key值为'list02'对应的value:" + map.get("list02"));
		System.out.println();
		
		System.out.println("迭代输出map集合中的所有元素");
		Set<String> keys = map.keySet() ;
		for (String key : keys) {
			System.out.println(key + ":" +map.get(key));
		}
		System.out.println();
		
		System.out.println("map中是佛包含key值为'list01'的元素：" +map.containsKey("list01"));
		System.out.println("删除map中key值为'list01'的元素");
		map.remove("list01") ;
		System.out.println("map中是佛包含key值为'list01'的元素：" +map.containsKey("list01"));
		System.out.println();
		
		System.out.println("迭代输出map集合中的所有元素");
		Set<Entry<String, List<Student>>> objectSet = map.entrySet() ;
		for (Entry<String, List<Student>> entry : objectSet) {
			System.out.println(entry.getKey() + ":" +entry.getValue());
		}
	}
	
}
